// 从electron上按需引入 两个模块
const { app, BrowserWindow, ipcMain, dialog } = require("electron");
const DataStore = require("./renderer/MusICDataStore");
const myStore = new DataStore({ name: "Music Data" });
// 持久化存储的包
// const Store = require('electron-store');

// const store = new Store();

// store.set('unicorn', '🦄');
// console.log(store.get('unicorn'));
// //=> '🦄'

// // Use dot-notation to access nested properties
// store.set('foo.bar', true);
// console.log(store.get('foo'));
// //=> {bar: true}

// store.delete('unicorn');
// console.log(store.get('unicorn'));
// //=> undefined

app.on("ready", () => {
  // electron完全加载
  // 创建窗口
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true, // 在这个mainWindow里可以使用node的API
      contextIsolation: false,
    },
  });
  mainWindow.loadFile("./renderer/index.html");

  // 窗口准备好后，所有的事件都加上去了
  mainWindow.once("ready-to-show", () => {
    // 首先就加载一次
    mainWindow.send("getTracks", myStore.getTracks());

    mainWindow.show();
  });

  // const secondWindow = new BrowserWindow({
  //   width: 400,
  //   height: 300,
  //   webPreferences: {
  //     nodeIntegration: true, // 在这个mainWindow里可以使用node的API
  //   },
  //   // 设置父级窗口
  //   parent: mainWindow
  // })
  // secondWindow.loadFile('index2.html')

  // 接收渲染进程传递的消息 测试渲染进程message方法传递的数据
  ipcMain.on("message", (event, arg) => {
    // 将收到信息的结果发送回去 方式一 及 方式二 参数为方法名 传递的数据
    // 1.事件对象上的sender方法
    // event.sender.send('reply','hello from main')
    // 2.窗口对象上的sender方法
    mainWindow.send("reply", "hello from main");
  });

  // 监听渲染进程中传递放点击添加歌曲按钮
  ipcMain.on("add-music-window", (event, arr) => {
    // console.log(arr);
    // 创建添加音乐的窗口
    const addWindow = new BrowserWindow({
      width: 500,
      height: 400,
      webPreferences: {
        nodeIntegration: true,
        contextIsolation: false,
      },
      parent: mainWindow,
    });
    addWindow.loadFile("./renderer/add.html");
    addWindow.once("ready-to-show", () => {
      addWindow.show();
    });
  });

  // 监听添加音乐窗口 点击选择音乐事件
  ipcMain.on("open-music-file", (event, arr) => {
    // console.log(arr);
    // 打开系统的选择文件弹出框
    dialog
      .showOpenDialog({
        properties: ["openFile", "multiSelections"],
        filters: [{ name: "Music", extensions: ["mp3"] }],
      })
      .then((result) => {
        // console.log(result,'ree');
        if (!!result.filePaths.length) {
          // 将选中的文件路径发送过去
          event.sender.send("selected-file", result.filePaths);
        }
      });
  });

  // 监听渲染进程点击导入音乐事件
  ipcMain.on("add-tracks", (event, tracks) => {
    // console.log(tracks);
    // 持久化存储歌曲文件
    myStore.addTracks(tracks);
    const updatedTracks = myStore.getTracks();
    // console.log(updatedTracks);
    // 将数据发送给主窗口
    mainWindow.send("getTracks", updatedTracks);
  });

  // 删除音乐
  ipcMain.on("delete-track", (event, id) => {
    console.log("main delete");
    myStore.deleteTrack(id);
    const updatedTracks = myStore.getTracks();
    mainWindow.send("getTracks", updatedTracks);
  });
});
